home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / AMSrv_0_9.lha / AMSrv / Doc / MUDServ.txt < prev    next >
Text File  |  1995-01-21  |  27KB  |  618 lines

  1. AmigaMUD, Copyright 1995 by Chris Gray
  2.  
  3.  
  4.             The 'MUDServ' Program
  5.  
  6. MUDServ is the AmigaMUD server program. It is the largest and most
  7. complex part of the system, but it is quite easy to use. MUDServ runs
  8. all of the AmigaMUD scenario code, maintains the database files,
  9. responds to client requests, provides all of the builtin functions
  10. that can be used, provides for interaction between clients, runs the
  11. "machines", etc. A system is hosting an AmigaMUD if and only if it is
  12. running MUDServ. A system will normally only run one copy of AmigaMUD
  13. at a time, but it is possible to run more for testing purposes. This
  14. can be handy for having a production MUD as well as a development one.
  15.  
  16. MUDServ expects the MUD database files to be present in the directory
  17. which it is run from, or in a directory specified in a tooltype or
  18. command line parameter. These are:
  19.  
  20.     MUD.data - the raw data of the scenario. This includes the data
  21.     for characters, rooms, objects, monsters, etc. as well as the
  22.     AmigaMUD code that governs them. The system should be able to
  23.     support an arbitrary sized file, but so far, the standard
  24.     scenario (30,000 lines of source yielding hundreds of
  25.     locations, dozens of commands and objects, etc.) has not grown
  26.     much over 500K bytes.
  27.  
  28.     MUD.index - this is an index into MUD.data which allows mapping
  29.     from a unique constant identifier for something onto a
  30.     perhaps changing position in the MUD.data file.
  31.  
  32. MUDServ will also create and write a 'MUD.log' file. This file can be
  33. deleted at will, but most people running servers will want to scan
  34. through it before deleting it. It often contains some interesting
  35. information. Also, there are commands in the standard scenario, such
  36. as 'bug', 'gripe' and 'typo' which let players put short complaints
  37. about things into the MUD.log file.
  38.  
  39. Valid database files are either copied from another source or are
  40. produced by the 'MUDCre' program and expanded via MUDServ. The files
  41. are in a binary format, and are not intended to be read by humans.
  42. Mess around editing them at your own risk. MUDServ assumes they are
  43. valid - it may crash your system if they are not, just like an invalid
  44. program might.
  45.  
  46. MUDServ requires a stack size of 25000 bytes in order to run. It will
  47. exit right away if the stack is not at least that large. If running
  48. from a shell, you can use the 'Stack' command (perhaps from a shell-
  49. startup file) to set it. If running from the Workbench, you can use
  50. the "Icons"/"Information" menu item to set it.
  51.  
  52.  
  53. Warning
  54.  
  55. MUDServ maintains an in-memory cache of the most recently used
  56. database items. When items are changed, as a result of player actions,
  57. machine actions or timed events, the changes are NOT immediately
  58. written out to the on-disk copy of the database. This behavior is
  59. required in order to get reasonable performance from the system
  60. without having continual disk I/O even on a fast hard drive. Without
  61. this, the system would be completely unusable on a floppy-based
  62. system. Because of this behavior, you must not simply shut off or
  63. reboot the host machine when you are through playing. You must
  64. properly flush the database and shut the server down. This can be done
  65. using the MUDShut program or a BREAK to the MUDServ process, as
  66. described later. If you wish to automate backups of the AmigaMUD
  67. database, the '-w' CLI option to MUDShut is useful. With this flag
  68. set, MUDShut will send a different type of request to MUDServ, and
  69. MUDServ will not reply until it has fully shut down. Thus, the MUDShut
  70. command will not return until the database has been fully written out
  71. and the files closed.
  72.  
  73.  
  74. Workbench Tool Types
  75.  
  76. When MUDServ is started from the Workbench, it accepts several tool-
  77. types in its icon. Some of these are boolean (true/false) values. For
  78. these, any of YES/yes/TRUE/true/Y/y/T/t or an empty value, are
  79. accepted as true, and any other value is accepted as false. Note that
  80. on early versions of the AmigaOS, empty values are not valid. The
  81. following Workbench tooltypes are accepted by MUDServ when it is
  82. started from the Workbench:
  83.  
  84.     PATH=<path> - specify a path to the directory in which the
  85.     AmigaMUD database files exist. The default is the directory
  86.     from which MUDServ is run.
  87.  
  88.     PORTNAME=<name> - specify the name of the Amiga OS Exec port name
  89.     that MUDServ is to create and export. This is the port by
  90.     which all clients connect to the server. The default name is
  91.     "MUD port".
  92.  
  93.     TEST - useful for running a test AmigaMUD while a production one
  94.     is running. Sets the port name to "MUD test port".
  95.  
  96.     WIZARD - any connections by "SysAdmin" (the AmigaMUD system
  97.     administrator character) will be forced into "wizard" mode.
  98.     This is useful if SysAdmin messes up and gets into a state
  99.     where he can't otherwise get into wizard mode. This can happen
  100.     if an invalid input handler is installed.
  101.  
  102.     NORETRY - in some situations, such as not being able to allocate
  103.     memory, the server cannot proceed normally. It will then put
  104.     up a requester indicating the problem, and asking the user if
  105.     it should try again. If the user can do something that can
  106.     possibly fix the problem (such as shutting down other programs
  107.     to free up memory), then they should do so, and answer in the
  108.     affirmative. The server will then try again. If the user
  109.     answers in the negative, then MUDServ will abort. Setting the
  110.     NORETRY tooltype tells the server to abort immediately,
  111.     without looking for help from the user.
  112.  
  113.     CACHE=<n> - specifies the size of the in-memory database cache.
  114.     This cache holds the most recently accessed or written parts
  115.     of the database in memory, so that they can be accessed more
  116.     quickly. Larger cache sizes reduce the amount of disk I/O
  117.     needed during operation. The minimum cache size is 32768
  118.     bytes. The default cache size is 50000 bytes. I find a cache
  119.     size of 500000 bytes to be quite adequate. Note that the cache
  120.     must be available as a single contiguous region. The largest
  121.     region a system has available is indicated by the 'Avail'
  122.     shell command. Other needs may prevent the use of a cache that
  123.     large, however. One disadvantage of a large cache is that it
  124.     takes a while to flush it to disk, so players would notice a
  125.     few seconds of non-responsiveness whenever it had to be
  126.     flushed out.
  127.  
  128.     MEMORY=<n> - specifies the amount of memory that the server should
  129.     try to limit itself to. This does not include the cache, cache
  130.     index data structures, the in-memory copy of the MUD.index
  131.     file, or messages allocated to send to clients. It does
  132.     include memory for AmigaMUD functions, in-memory copies of
  133.     symbol tables and grammars, client structures, machine
  134.     structures, a write-back use-count cache, etc. The value given
  135.     is not a hard limit - the server will try to keep under it,
  136.     but will often exceed it. Providing a small memory limit will
  137.     require more database accesses, putting more stress on the
  138.     database cache, and requiring more disk I/O operations. The
  139.     default limit is 1000000000 bytes, which is effectively no
  140.     limit.
  141.  
  142.     REQUEST=<n> - specifies a limit on the number of requests
  143.     (messages) that the server should observe. Requests are
  144.     AmigaMUD messages between the server and the clients. When it
  145.     needs to send a message, the server will try to get one from
  146.     its pool of free ones. If the pool is empty, then it will
  147.     allocate one from the system. When it receives a message that
  148.     does not need a reply, the server adds the message to its pool
  149.     of free messages. If that pool contains more than the given
  150.     number of messages, it will free the new one back to the
  151.     system. The expense of having a small limit is one of CPU time
  152.     and not disk I/O. The default limit is 100.
  153.  
  154.  
  155. Command Line Flags
  156.  
  157. When MUDServ is started from a shell, the following flags can be
  158. given (see the above section for more detailed descriptions):
  159.  
  160.     -T - use "MUD test port" as the Amiga OS message port name
  161.  
  162.     -W - force SysAdmin to enter in wizard mode
  163.  
  164.     -N - do not retry on abort situations
  165.  
  166.     -P<name> - use <name> as the Amiga OS message port name
  167.  
  168.     -c<n> - use <n> as the database cache size
  169.  
  170.     -m<n> - use <n> as the maximum memory usage target
  171.  
  172.     -r<n> - use <n> as the free request limit
  173.  
  174. If a parameter without a leading '-' is given, then it is taken as a
  175. path to where the database files can be found.
  176.  
  177.  
  178. Shutting MUDServ Down
  179.  
  180. MUDServ uses write-back caching for the database. This means that
  181. changes made to the database are not immediately written to disk.
  182. Instead, the changes are kept in the in-memory cache, and only written
  183. to disk when that cache is "flushed". This flushing is done on
  184. shutdown, in response to running the 'MUDFlush' program, in response
  185. to calling the 'Flush' builtin, or whenever the database code cannot
  186. find a large enough slot for a new value. Because of this, the on-disk
  187. copy of the database is not accurate and consistent except immediately
  188. after a flush of the in-memory cache. This means that you cannot
  189. safely shut down MUDServ by simply rebooting or turning off your
  190. Amiga. Doing so will leave you with a scrambled database.
  191.  
  192. Using write-through caching, where all changes are written to disk
  193. immediately, would be hopelessly slow - almost everything done in
  194. AmigaMUD changes the database, often in several ways. For example, a
  195. character walking from one room to another changes the record of which
  196. room the character is in. This is also true for 'machines', such as
  197. the randomly generated monsters in the standard scenario.
  198.  
  199. There are three safe ways to shut down MUDServ. In all of these ways,
  200. it will not actually shut down until all clients have disconnected. It
  201. will, however, remember that it is supposed to shut down and do so as
  202. soon as it can. The program 'MUDShut' sends a special message to
  203. MUDServ, requesting that it shutdown. Running MUDShut multiple times
  204. will not speed the process up. When the special privileged character
  205. SysAdmin is connected and in "wizard" mode (working directly with the
  206. AmigaMUD programming language, rather than playing the scenario), he
  207. can enter a line reading "ShutDown(true).". This line is a call to the
  208. 'ShutDown' builtin function, and tells the server that it should shut
  209. down as soon as possible. Of course, it cannot do so until SysAdmin
  210. logs out. A line reading "ShutDown(false)." will cancel all previous
  211. requests to shut down. If MUDServ is started from a shell, it will
  212. have a CLI Process number. Sending a standard BREAK signal (using the
  213. 'Break' command) to that process will tell MUDServ to shut down. If
  214. the MUDShut program is run from a shell, it can be given the '-w'
  215. flag, which will cause it to use a special request to MUDServ, such
  216. that MUDShut will not exit until the server has written out and closed
  217. all of the database files. This can be used to allow automatic
  218. backups.
  219.  
  220. It is possible for MUDServ to get into an inconsistent state where it
  221. cannot respond to a normal shutdown request. This could be, for
  222. example, when stuck in an infinite loop in AmigaMUD code, when
  223. SysAdmin has put in an extremely large execution time limit. In this
  224. situation, sending a 'BREAK F' signal to the MUDServ process will
  225. cause it to stop its current AmigaMUD code execution and return to its
  226. top level activity loop. Two such signals will cause it to abort
  227. immediately. Do not do this unless you really need to. If you do so,
  228. you will have to restore your database from a backup copy, and you may
  229. want to reboot your Amiga to recover memory that MUDServ was not able
  230. to free when it aborted.
  231.  
  232.  
  233. Remote Connections
  234.  
  235. Also part of hosting AmigaMUD are possible copies of the MUDAgent
  236. program running on the host machine. These copies will run without the
  237. server being active if they are waiting for incoming calls, so they
  238. don't normally have to be shut down. If they are started from a shell,
  239. they can be shut down by doing a 'BREAK' on their process number. If
  240. they are started from the Workbench, they can be shut down by running
  241. the 'AgentKill' program, which will find their tasks and set the BREAK
  242. signal on them.
  243.  
  244. Often, the MUDAgent copies are started on demand by some other
  245. program, such as a BBS or 'Getty'. In that situation, they exist only
  246. for the duration of one session, so there is nothing to shut down.
  247.  
  248.  
  249. A Few Basic Wizarding Procedures
  250.  
  251. SysAdmin, or any other wizard, can enter wizard mode from the standard
  252. scenario by typing the "wizard" command. In wizard mode, user input is
  253. not handled by the scenario, but is either one of a very few wizard-
  254. mode commands, or is a statement in the AmigaMUD programming language.
  255. For reference, the way for a wizard to get back into playing mode from
  256. wizard mode is to type the following:
  257.  
  258.     Normal().
  259.  
  260. on an input line by itself, when the prompt is "> ". Note that this
  261. input line, as well as all of the following ones, ends in a period.
  262. This period is required, to indicate the end of the statement. If you
  263. forget it, the prompt will switch to ": ", and nothing will happen.
  264. You must then type the period to execute the statement. Note also that
  265. the capitalization of these input statements must be as shown.
  266.  
  267. The standard scenario sets the "creation password" to an empty string.
  268. This means that no special password or permission is needed to create
  269. a new character. A creation password can be installed by using the
  270. following line while in wizard mode (only SysAdmin can do this):
  271.  
  272.     NewCreationPassword().
  273.  
  274. The system will prompt for the new password. If the password begins
  275. with an asterisk ('*'), then automatic player creation is not allowed
  276. at all. In that case, SysAdmin will have to manually create all new
  277. characters. This is done in wizard mode as follows:
  278.  
  279.     CreateCharacter("characterName", "characterPassword").
  280.  
  281. The character will be created with the given name and password. As
  282. usual, it is best not to include spaces or punctuation in the name. A
  283. character can be removed from the system using:
  284.  
  285.     DestroyCharacter("characterName").
  286.  
  287. Note that the above can leave unreachable junk in the database, if the
  288. character is carrying complicated objects such as containers. A
  289. character can be booted off of the system with:
  290.  
  291.     use Characters
  292.     BootClient(characterName).
  293.  
  294. If something prevents that from working, and it is truly necessary to
  295. get rid of the player right away, the following can be used:
  296.  
  297.     use Characters
  298.     NukeClient(characterName).
  299.  
  300. This is a rather drastic method, however, so avoid it whenever
  301. possible. When the character reconnects, he/she will likely have to
  302. move around a bit and do some "looks" to get the graphics to come back
  303. properly. This is because "NukeClient" is so abrupt that it does not
  304. allow the client to execute the scenario shutdown code.
  305.  
  306. If SysAdmin wishes to make a character into a wizard or apprentice,
  307. this can be done in wizard mode as follows:
  308.  
  309.     use Characters
  310.  
  311.     MakeApprentice(CharacterName, false).
  312. or
  313.     MakeWizard(CharacterName, false).
  314.  
  315. The "use Characters" needs to be done only once per connection. Note
  316. that here the character name is not quoted - it is known directly
  317. because the "Characters" table is in-use. Note also that this method
  318. will not work if the character name has spaces or punctuation marks in
  319. it. The "false" in the above tells the system to not immediately
  320. change the mode of the player. If the player is currently connected
  321. and "true" is used instead, then the player will be immediately placed
  322. into wizard mode. A wizard or apprentice can be demoted back to a
  323. normal character using:
  324.  
  325.     MakeNormal(CharacterName).
  326.  
  327. MUDServ places an execution time limit on the AmigaMUD code run in
  328. response to any input line or mouse-click. The execution is aborted if
  329. this limit is exceeded. The standard scenario sets this limit to 10
  330. seconds. Other limits can be set as follows:
  331.  
  332.     RunLimit(new-limit).
  333.  
  334. where 'new-limit' is the new execution time limit in seconds. The old
  335. limit will be printed out. Do not make the limit too large, as this
  336. can cause MUDServ to hang if erroneous wizard code is encountered.
  337.  
  338. There is no command in the standard scenario to allow sending a
  339. message to all connected players. This can be done as follows:
  340.  
  341.     APrint("This is the message.").
  342.  
  343. This can be used to announce system shutdowns, special events, etc.
  344. The standard scenario uses it to announce when a character completes a
  345. Quest.
  346.  
  347.  
  348. Messages in MUD.log
  349.  
  350. Many different messages can appear in the MUD.log file. Some are just
  351. informational, but others can indicate problems, either with the
  352. system as a whole or with the scenario. I will attempt to explain some
  353. of them here, but there are many that are not explained, either
  354. because they are (hopefully) obvious, or because they are coming
  355. through some obscure path that I miss. Most lines in the log file will
  356. be prefixed by the date and time they are produced.
  357.  
  358. _start = 0x07ccb890 lib = 0x07cbf554
  359.  
  360.     This line is produced when the server starts up. The exact numbers
  361.     will differ, often from run to run. They are useful only to the
  362.     author of the system. If the system gets an "Enforcer" hit or
  363.     other system problem in which the CPU program counter is
  364.     available, these numbers are helpful in pinning down the location
  365.     in the code of the problem.
  366.  
  367. Player SysAdmin enters the game
  368. Player SysAdmin leaves the game
  369.  
  370.     Messages of this type are produced whenever a player enters or
  371.     leaves the game. External programs can then be run to keep track
  372.     of who is using the game and when, and perhaps to add up the
  373.     amount of time various players are spending in the game.
  374.  
  375. Setting WIZARD mode
  376. Clearing WIZARD mode
  377.  
  378.     These messages occur whenever a wizard or apprentice goes in or
  379.     out of wizard (programming) mode. They can be useful in tracking
  380.     down the causes of problems created in the scenario.
  381.  
  382. expandIndexTable
  383.  
  384.     This message indicates than it was necessary for the database code
  385.     to increase the size of its index array. A number of these will
  386.     occur when compiling the standard scenario, and occasional ones
  387.     can occur when running. They are indications of increasing memory
  388.     usage.
  389.  
  390. Server shutdown request via message - currently 0 clients
  391. Shutting down, 1 client serviced
  392. Machines: 8 created, 0 deleted
  393. Things: 668 created, 0 destroyed
  394. Messages: 24332 processed, 1895 sent
  395. Allocator used 1679360 bytes. Given limit 1000000000
  396. cre 5082 del 5 rd 24638 rep 2028 shr 2 exp 7065 dir 6159
  397. frd 392 fwt 1469 fsk 1681
  398.  
  399.     These messages are typical of shutting down the server. This
  400.     particular set came after compiling the complete standard
  401.     scenario. Normally, the memory usage figure will be much smaller.
  402.     The server will not shut down when there are active clients, so
  403.     the shutdown request (which can come via a message sent by the
  404.     MUDShut program, a shell 'break' signal to the server process, or
  405.     by SysAdmin calling the 'ShutDown(true)' builtin) can be quite a
  406.     ways before the actual shutdown.
  407.  
  408.     Machines are the 'robots' or NPC's (Non-Player-Characters) in the
  409.     AmigaMUD system. During active playing in the standard scenario's
  410.     combat area, the number created and destroyed can be much higher,
  411.     perhaps in the tens or hundreds of thousands.
  412.  
  413.     Things are the basic entities in the AmigaMUD system. They
  414.     represent players, machines, rooms, objects, etc.
  415.  
  416.     Messages are the means by which player input is sent to the server
  417.     and player output is sent from the server. Again, the numbers
  418.     would normally be quite a bit higher with active players.
  419.  
  420.     The memory used by the allocator does not include the database
  421.     cache and an in-memory copy of the MUD.index file. It also does
  422.     not include the various messages that the server may have had to
  423.     allocate.
  424.  
  425.     The next line gives some statistics on the database activities:
  426.  
  427.     cre: database entries (things, players, strings, tables,
  428.         machines, procedures, property structures, etc.) that were
  429.         created in this run
  430.     del: database entries deleted
  431.     rd: database entries read (on long, intensive runs, I've seen
  432.         this number over 20,000,000)
  433.     rep: database entries replaced
  434.     shr: database entries shrunk (e.g. when properties are removed
  435.         from a thing, or elements are deleted from a list)
  436.     exp: database entries expanded
  437.     dir: database entries dirtied (a change made which doesn't
  438.         involve changing the size of the entry)
  439.  
  440.     The next line indicates the number of actual disk I/O operations
  441.     that the database code had to make. The ratio between the above
  442.     numbers and these numbers is an indication of how effective the
  443.     database cache has been:
  444.  
  445.     frd: number of actual file reads
  446.     fwt: number of actual file writes
  447.     fsk: number of file seeks
  448.  
  449. DataSize 605678=>605678 IndexCurrent 7027=>7021
  450.  
  451.     On occasions, the database code will scan through the highest
  452.     indexed database entries, attempting to merge and free them. This
  453.     line indicates the success of doing so. 'DataSize' indicates the
  454.     total used size of the MUD.data file. 'IndexCurrent' indicates the
  455.     total used size of the MUD.index file.
  456.  
  457. Server flush request via message
  458.  
  459.     This message indicates that a request to flush the database to
  460.     disk was received. This is generated by running the 'MUDFlush'
  461.     program.
  462.  
  463. BootClient for player SysAdmin
  464.  
  465.     This indicates that a request was generated to shut down the
  466.     indicated client. The client will exit as soon as its current
  467.     activity in the server is done. In this case, it was generated by
  468.     the scenario calling the 'Quit' builtin as a result of the player
  469.     entering the 'bye' command.
  470.  
  471. Agent shutdown for player SysAdmin
  472.  
  473.     The MUDAgent program has shut down a connection for some reason.
  474.     This could be loss of carrier, activity timeout, failure to
  475.     communiate, etc.
  476.  
  477. NukeClient for player SysAdmin
  478.  
  479.     This is a record of a more severe method of shutting down a given
  480.     client. In this case, the system tries to shut the client down
  481.     right away, and does not wait for anything. This is done by
  482.     SysAdmin via the 'NukeClient' builtin.
  483.  
  484. SysAdmin has set the shutdown flag.
  485. SysAdmin has cleared the shutdown flag.
  486.  
  487.     These appear in response to SysAdmin using the ShutDown builtin.
  488.  
  489. Name1 changed name to Name2
  490.  
  491.     A system administrator will sometimes want to keep track of which
  492.     characters are played by which real people. This message helps by
  493.     logging when a character changes name. It comes from the
  494.     'ChangeName' builtin.
  495.  
  496. New player when no entry action!
  497.  
  498.     This message indicates that a person has tried to connect and
  499.     create a new character when there is not yet an 'entry-action'
  500.     routine in the scenario. This is the routine, set by the
  501.     'SetNewCharacterAction' builtin, which is called to setup a new
  502.     character.
  503.  
  504. no memory for server request
  505.  
  506.     This will be immediately followed by an abort. The server could
  507.     not allocate memory for a message, and so cannot proceed.
  508.  
  509. serverMessage: got unexpected type NN from server
  510. MUDState NNNN > 1000
  511. Can't find local offset XXXXXXXX in 'readExec'
  512. can't find ref key in 'readExec'
  513. invalid request type
  514. client not found
  515. client already editing
  516. can't find name for builtin in subPublicProc
  517. can't find Characters in public symbol table
  518. can't find Builtin in public symbol table
  519.  
  520.     These should not happen, and will cause an abort. If they happen,
  521.     something serious is wrong with your AmigaMUD system. This could
  522.     be an invalid program, a damaged database, failing hardware, etc.
  523.     You should not continue to run such a system, since it is possible
  524.     that important data on your hard disk could be damaged.
  525.  
  526. can't create MUD port
  527. can't allocate interrupt
  528. can't open timer device
  529. can't allocate timer request
  530. can't create timer port
  531.  
  532.     These messages indicate that MUDServ could not start up because it
  533.     could not do all of its initialization. They usually indicate that
  534.     they system does not have enough free memory.
  535.  
  536. MUD port already exits
  537.  
  538.     This can happen if you try to start two servers using the same
  539.     port name. If you get this message when you are sure that there is
  540.     no other copy of MUDServ running, then you will have to reboot
  541.     your system to clear the condition.
  542.  
  543. Fail to seek to end to expand
  544.  
  545.     The database code needed to expand MUD.data, but could not seek to
  546.     the current end of the file in order to write more to it. This
  547.     should not happen.
  548.  
  549. Fail to write NN bytes to expand
  550. Fail to write block to expand
  551. Fail to write NNN bytes to flush buffer
  552. can't write index to index file
  553.  
  554.     This can happen if your disk is full. In this case you will have
  555.     to go back to a backup of your database files, since the current
  556.     ones are no longer internally consistent. This kind of symptom can
  557.     also happen if the disk or partition in use becomes write
  558.     protected.
  559.  
  560. Fail to seek to NNNNNN to flush buffer
  561. Fail to seek to write direct
  562. Fail to write NNN bytes direct
  563.  
  564.     This is a similar seek failure. It should not happen. If it does,
  565.     there is something wrong with your system.
  566.  
  567. Fail to seek to NNNNNN to read direct
  568. Fail to read NNN bytes direct
  569. Fail to seek to NNNNNN to fill buffer
  570. Fail to read enough into buffer
  571.  
  572.     This can indicate a filesystem failure or a corrupt database. In
  573.     either case, you will need to restore from a backup.
  574.  
  575. can't write XXXXX to index file
  576. can't open/create new index file
  577.  
  578.     The MUD.index file has several special values at its beginning.
  579.     One of them couldn't be written when flushing the database. This
  580.     will yield a corrupt set of database files. It is also possible
  581.     that this kind of symptom could occur if the disk that AmigaMUD
  582.     is running on becomes write protected.
  583.  
  584. offset > SORT_BUCKETS XXXXXXXX
  585. CacheLRUHead ~= next in ioFlush
  586. Too few cache entries to make one for len NNN
  587. No cache slot len NNN for item
  588. Cannot create cache slot len NNN for item
  589. invalid type to ioCreate
  590. key XXXXXXXX not in cache for ioDirty
  591. key XXXXXXXX not in cache for ioExpand
  592. new len < oldlen on ioExpand of XXXXXXXX
  593. assumption failed in ioExpand!
  594. ioShrink, newLen 0
  595. Key XXXXXXXX not in cache for 'ioShrink'
  596. new len > old len on ioShrink of XXXXXXXX
  597. ioReplace, newLen = 0
  598. ioDelete(XXXXXXXX) - already deleted!
  599.  
  600.     I've got a bug. Let me know.
  601.  
  602. database overflow - too many entries!!!
  603.  
  604.     The system thinks you have more than 2 ** 24 entries (over 16
  605.     million). I can't believe that!
  606.  
  607. expansion failed
  608.  
  609.     An attempt was made to expand the in-memory copy of MUD.index. A
  610.     region of memory big enough could not be allocated. You will have
  611.     to restore from backup files, and attempt to make more free memory
  612.     available for running.
  613.  
  614. AmigaMUD code running in the scenario can also add lines to the log
  615. file. The content of those lines is entirely up to the scenario. In
  616. the standard scenario, they are user-generated comments about bugs or
  617. typos, or just plain complaints.
  618.